home *** CD-ROM | disk | FTP | other *** search
/ Freelog 22 / freelog 22.iso / Prog / Djgpp / GPC2952B.ZIP / info / gpc.i17 < prev    next >
Encoding:
GNU Info File  |  2001-02-09  |  37.3 KB  |  1,008 lines

  1. This is gpc.info, produced by makeinfo version 4.0 from gpc.texi.
  2.  
  3. INFO-DIR-SECTION GNU programming tools
  4. START-INFO-DIR-ENTRY
  5. * GPC: (gpc).                   The GNU Pascal Compiler.
  6. END-INFO-DIR-ENTRY
  7. INFO-DIR-SECTION Individual utilities
  8. START-INFO-DIR-ENTRY
  9. * GPC: (gpc)Invoking GPC.       The GNU Pascal Compiler.
  10. END-INFO-DIR-ENTRY
  11.  
  12.    This file documents the GNU Pascal Compiler.
  13.  
  14.    Copyright (C) 1988, 1996-2001 Free Software Foundation, Inc.
  15.  
  16.    Permission is granted to make and distribute verbatim copies of this
  17. manual provided the copyright notice and this permission notice are
  18. preserved on all copies.
  19.  
  20.    Permission is granted to copy and distribute modified versions of
  21. this manual under the conditions for verbatim copying, provided also
  22. that the sections entitled "GNU General Public License", "The GNU
  23. Project", "The GNU Manifesto" and "Funding for Free Software" are
  24. included exactly as in the original, and provided that the entire
  25. resulting derived work is distributed under the terms of a permission
  26. notice identical to this one.
  27.  
  28.    Permission is granted to copy and distribute translations of this
  29. manual into another language, under the above conditions for modified
  30. versions, except that the sections entitled "GNU General Public
  31. License", "The GNU Project", "The GNU Manifesto" and "Funding for Free
  32. Software" and this permission notice, may be included in translations
  33. approved by the Free Software Foundation instead of in the original
  34. English.
  35.  
  36. 
  37. File: gpc.info,  Node: Mailing List Archives,  Next: Newsgroups,  Prev: Mailing List,  Up: Support
  38.  
  39. The GPC Mailing List Archives
  40. =============================
  41.  
  42.    Perhaps your problem was already discussed on the list. There is a
  43. searchable archive of the mailing list on the WWW. It can be browsed or
  44. searched at `http://www.gnu.de/archive/wilma.cgi/gpc'.
  45.  
  46.    The archive of the GPC announcement list is at
  47. `http://www.gnu.de/archive/wilma.cgi/gpc-announce'.
  48.  
  49.    _Note:_ Currently, the search option is working fine. If you find it
  50. broken, please email me at <anja@drewitz.de>. Please don't mail a copy
  51. to the GPC list because I let procmail move all mails with `To: gpc...'
  52. and `Cc: gpc...' to a separate folder and would not see your mail for a
  53. long time. -- Anja
  54.  
  55.    This archive starts in June 1999. For older messages, see:
  56.  
  57.      `ftp://agnes.dida.physik.uni-essen.de/gnu-pascal/misc/gpc-list-1998.gz'
  58.      (513 kB)
  59.      `ftp://agnes.dida.physik.uni-essen.de/gnu-pascal/misc/gpc-list-1997.gz'
  60.      (995 kB)
  61.      `ftp://agnes.dida.physik.uni-essen.de/gnu-pascal/misc/gpc-list-1996.gz'
  62.      (154 kB)
  63.      `ftp://agnes.dida.physik.uni-essen.de/gnu-pascal/misc/gpc-list-1995.gz'
  64.      (42 kB)
  65.  
  66.    There is also a HTML version of these older archives at
  67. `http://www.iula.upf.es/altres/pub/gpc/list2html/gpclist.htm'.
  68.  
  69. 
  70. File: gpc.info,  Node: Newsgroups,  Next: Professional Support,  Prev: Mailing List Archives,  Up: Support
  71.  
  72. Newsgroups relevant to GPC
  73. ==========================
  74.  
  75.    To get support, you can also ask the Usenet newsgroups for help.
  76. There are several Pascal related newsgroups, but none is dedicated just
  77. to GNU Pascal, so use the one which is most appropriate for your
  78. problem. For general Pascal questions, we recommend the following one:
  79.  
  80. `news://comp.lang.pascal.misc'       Pascal in general and ungrouped
  81.                                      Pascals.
  82.  
  83.    Pascal syntax related questions may be appropriate in:
  84.  
  85. `news://comp.lang.pascal.ansi-iso'   Pascal according to ANSI and ISO
  86.                                      standards.
  87.  
  88.    The next newsgroup is a haven for beginners, answering questions
  89. that would apply to almost any Pascal. However, if you have a
  90. GPC-specific question don't post there - use the GPC mailing list.  And
  91. when in doubt use the GPC mailing list.
  92.  
  93. `news://comp.lang.pascal.borland'    Borland Pascal questions.
  94.  
  95.    Don't forget to give back what you have obtained. None of us is
  96. getting money for answering your questions (unless you pay us by
  97. yourself). Please do your part by answering the questions of others
  98. instead.
  99.  
  100. 
  101. File: gpc.info,  Node: Professional Support,  Next: Compiler Crashes,  Prev: Newsgroups,  Up: Support
  102.  
  103. Where to get individual support for GPC
  104. =======================================
  105.  
  106.    GPC is free software and comes *without any warranty*.
  107.  
  108.    If you want to get professional support, you can hire an individual
  109. or a company for providing such a service.
  110.  
  111.    G-N-U GmbH (http://www.g-n-u.de) is doing large parts of the
  112. development of GNU Pascal. This company offers special support for GPC
  113. and can be contacted at <info@g-n-u.de>.
  114.  
  115.    More generally, to find a company or an individual who offers
  116. support and other consulting services for free software, look into the
  117. GNU Service Directory (http://www.gnu.org/prep/service.html).
  118.  
  119. 
  120. File: gpc.info,  Node: Compiler Crashes,  Next: Reporting Bugs,  Prev: Professional Support,  Up: Support
  121.  
  122. If the compiler crashes...
  123. ==========================
  124.  
  125.    If the compiler crashes, you have discovered a bug. A reliable
  126. compiler never crashes. To help the maintainers fix this bug, it is
  127. important that you send us a problem report.
  128.  
  129.    If you're on Unix, you can find out where the compiler crashed if
  130. you enable coredumps, then load the compiler (`gpc1') plus the core
  131. file in the debugger (`gdb /your_path_here/gpc1 core'), then type
  132. `backtrace' to get a stacktrace. Include this stacktrace in your bug
  133. report.
  134.  
  135. 
  136. File: gpc.info,  Node: Reporting Bugs,  Next: Testing,  Prev: Compiler Crashes,  Up: Support
  137.  
  138. How to report GPC bugs
  139. ======================
  140.  
  141.    If you encounter a bug with GPC, please check whether it is one of
  142. the known bugs (*note Known Bugs::). If not, please report it to the
  143. GNU Pascal mailing list (*note Mailing List::). That way, they always
  144. reach the maintainers. Please note the following points.
  145.  
  146.    * Please send a description of the problem. Try to give as much
  147.      information as possible, with the full text of any error messages
  148.      encountered, or a description of how some output varies from the
  149.      expected output. Always specify the operating system type with
  150.      version and the machine type (try `uname -a' if unsure) as well as
  151.      the version of GPC as printed by `gpc -v'.
  152.  
  153.    * A good article on submitting bug reports can be found at either
  154.      `http://www.chiark.greenend.org.uk/~sgtatham/bugs.html' or
  155.      `http://freshmeat.net/news/2000/02/26/951627540.html'
  156.  
  157.  
  158.    If the problem is with the compiler itself, not an installation
  159. problem or something like this, please provide a test program to
  160. reproduce the problem, and note the following hints. You can also
  161. contribute test programs for features that are working in GPC to ensure
  162. they will not break in future releases.
  163.  
  164.    * The test program should be as short as possible, but *by all
  165.      means*, please send a *complete* program and *make sure* that it
  166.      still reproduces the problem before you send it. Too often, users
  167.      have sent code which contained obvious syntax errors far before
  168.      the actual problem, or just code fragments we could only make wild
  169.      guesses about. This is unproductive for us and doesn't help you
  170.      get your problem solved.
  171.  
  172.  
  173.    The preferred form for test programs is the form that the automated
  174. GPC Test Suite understands. Please, if at all possible, send your test
  175. programs in this form which should be easy to do, so we won't have to
  176. waste our time to bring them into this form, and can concentrate on
  177. fixing the problem.
  178.  
  179.    * The file containing the main program must contain the keyword
  180.      `program' (case-insensitively) to be recognized by the testing
  181.      script. Other files, which can contain units or modules or data
  182.      needed by the program, must not contain the word `program'.
  183.  
  184.    * Since the Test Suite must run under very ... nah ... strange
  185.      operating systems, too, file names must be distinguished in their
  186.      first eight characters (case-insensitively) and should not contain
  187.      anything but letters, numbers, hyphens, underscores and a single
  188.      dot. The extension must be `.pas' to be recognized by the testing
  189.      script. Furthermore, any ancillary files (units, modules,
  190.      includes, data files) should not be longer than "8+3" characters.
  191.      It is often a good idea to use your name, nickname or initials
  192.      followed by a number as the file name.
  193.  
  194.    * The test program, when run, should produce a line of output
  195.      consisting of the string `OK' (followed by a newline) if
  196.      everything went as expected, and something else (e.g. `failed',
  197.      possibly followed by the reason of failure) if something went
  198.      wrong.
  199.  
  200.    * However, if the program is intended to check whether GPC catches an
  201.      (intentional) error in the program, place the string `WRONG'
  202.      somewhere in the test program, preferably in a comment in the line
  203.      that contains the intentional error, and make the program output
  204.      `failed' or something like this if it does compile mistakenly.
  205.  
  206.  
  207.    The following special features of the testing script may be helpful
  208. for constructing tests:
  209.  
  210.    * If the expected output is something else than `OK', place it in a
  211.      file `<basename>.out' (where `<basename>' is the name of the test
  212.      program without the `.pas' extension).
  213.  
  214.    * If the test program expects some input, place it in a file
  215.      `<basename>.in'. It will automatically be redirected to the
  216.      program's standard input.
  217.  
  218.    * If the test needs some special flags to be given to the GPC command
  219.      line, place them in a comment preceded by `FLAG', e.g.:
  220.  
  221.           (* FLAG --extended-pascal -Werror *)
  222.  
  223.    * The source file name of the test program will be passed as the
  224.      first command-line argument to the test program run.
  225.  
  226.    * If a test needs to be run in a special way, you can accompany the
  227.      program with a script `<basename>.run' that will do the actual
  228.      test after the test program was compiled. This script will be run
  229.      by `sh' (regardless of its first line). In order to be portable,
  230.      it should only use standard tools. The source file name of the test
  231.      program will be passed as the first command-line argument to the
  232.      run script in this case. The compiled file is always called
  233.      `a.out'.
  234.  
  235.    * If a test needs to be compiled in a special way (e.g., to decide
  236.      whether to skip the test), place the commands in a script
  237.      (preferably called `<basename>.cmp'), and put the file name of the
  238.      script (without directory) in a comment preceded by `COMPILE-CMD:'
  239.      into the source of the test program. The compile script will be
  240.      run *instead* of any other action for this test program, so it
  241.      gives you maximum flexibility to do whatever you need to do. This
  242.      script will be run by `sh' (regardless of its first line). In
  243.      order to be portable, it should only use standard tools.  The
  244.      first command-line argument to the compile script will be the
  245.      compiler to use, including all options. The second argument will be
  246.      the source file name of the test program. For some typical tests,
  247.      there are standard compile scripts, e.g. `i386.cmp' which will
  248.      skip the test unless run on an i386 compatible processor. This is
  249.      necessary, e.g., when testing assembler code. Of course, it's still
  250.      better to avoid having to use such scripts when possible.
  251.  
  252.  
  253. 
  254. File: gpc.info,  Node: Testing,  Prev: Reporting Bugs,  Up: Support
  255.  
  256. Running the GPC Test Suite
  257. ==========================
  258.  
  259.    _Note:_ If you have installed a GPC binary distribution, you usually
  260. don't have the Test Suite installed (you can download the GPC source
  261. distribution to get it, however), so this section does not apply to
  262. you. Still, you can find in the section `Contributing Tests to the Test
  263. Suite' how to report GPC bugs in the form of new test programs so we
  264. can fix them as fast as possible.
  265.  
  266.    The files in the test directory and subdirectories are for testing
  267. GPC only and should not be of any other use.
  268.  
  269.    Note: A few of the tests do not make sense on all systems. They are
  270. equipped with checks and will be skipped if they find the system not
  271. suitable. Skipped tests do *not* indicate a GPC bug, unless you have a
  272. reason to be sure that the particular test should make sense on your
  273. system.
  274.  
  275.    * To run the whole Test Suite, type `make' in the test directory (or
  276.      `make check' in the `p' object directory after building GPC).
  277.  
  278.    * The output will show all errors encountered (hopefully none) and
  279.      tests skipped, and finally display a summary giving the number of
  280.      successful, failed and skipped tests. Any failed test indicates a
  281.      bug in GPC which should be reported to the GPC mailing list,
  282.      <gpc@gnu.de>. Don't forget to mention the operating system you ran
  283.      the test on and any other relevant information about what you did.
  284.  
  285.    * You can also type `make pascal.check-long' to get a long output
  286.      which is a sequence of file names followed by `OK' for successful
  287.      tests, `SKIPPED' for skipped tests (both in capital letters), and
  288.      anything else for failed tests.
  289.  
  290.    * To run only some of the tests, you can type something like `make
  291.      MASK="foo[1-7]*.pas"' or `make MASK="foo42.pas" pascal.check-long'.
  292.  
  293.    * To clean up after running the tests, type `make clean'.
  294.  
  295.  
  296. 
  297. File: gpc.info,  Node: To Do,  Next: Internals,  Prev: Support,  Up: Top
  298.  
  299. The GNU Pascal To-Do List.
  300. **************************
  301.  
  302.    This is the To-Do list for the GNU Pascal Compiler.
  303.  
  304.    The GNU Pascal development team is constantly working on making GNU
  305. Pascal more reliable and more comfortable. However, there are some
  306. known bugs which will take some time to be fixed (any help welcome!),
  307. and we do not want to hide them from you. You might also be interested
  308. to know what features are planned to be implemented in the future. This
  309. list is meant to keep track of the known bugs and wanted features of
  310. GPC.
  311.  
  312.    If you want to report a new bug or suggest a new feature, the best
  313. way to do it is in the mailing list. This way, other GPC users can
  314. provide additional ideas, perhaps work-arounds for bugs, and the GPC
  315. maintainers can sooner start to think about how to solve the problem.
  316. The GPC mailing list is <gpc@gnu.de>. To subscribe, send the command
  317. `subscribe gpc your@email.address' in the body of a mail to
  318. <majordomo@gnu.de> (the subject is ignored). An archive of the mailing
  319. list can be found on the GPC home page.
  320.  
  321.    The list changes every few days. The present version refers to the
  322. current GPC snapshot, version 20010208.
  323.  
  324.    This list is part of the GNU Pascal Manual, included in GPC
  325. distributions and snapshots. You can always browse the most current
  326. version of the list on GPC's WWW page in HTML.  If you check the To-Do
  327. list regularly you can decide if and when to try a new snapshort.
  328.  
  329. * Menu:
  330.  
  331. * Known Bugs::        Known bugs in GPC
  332. * Planned Features::  Features planned for GPC
  333. * Done::              Fixed bugs and implemented features
  334.  
  335. 
  336. File: gpc.info,  Node: Known Bugs,  Next: Planned Features,  Up: To Do
  337.  
  338. Known bugs in GPC
  339. =================
  340.  
  341.    In the following sections, you can find information about GPC bugs
  342. that are known to the developers. The list always corresponds to the
  343. latest developer versions of GPC, usually not to the latest official
  344. distribution.
  345.  
  346.    If you encounter a bug with GPC, please check whether it is one of
  347. the known bugs. If not, report it to the GNU Pascal mailing list.  (But
  348. always report it if you solve the problem! ;-)
  349.  
  350.    Entries will be removed from the list as soon as the problem is
  351. solved in the developers' current GPC version. (Exception: If we can't
  352. reproduce the problem, but someone else can, the entry will be removed
  353. when we hear from this person that the problem is solved.)  Problems
  354. which are announced to be solved, but for which we (or the person who
  355. can reproduce the problem) did not get the proof (i.e., a GPC source
  356. patch) yet, are marked `(ok)'.
  357.  
  358.    A message ID (like `<42@foo.bar>') refers to a message in the GPC
  359. mailing list (or a newsgroup, denoted with `news:') where the topic was
  360. discussed (often a bug report). A note of the form `(xy20001231)'
  361. refers to an internal message of the GPC developers. A file name like
  362. `(foo42.pas)' refers to the according program in the GPC test suite
  363. included in the GPC source distribution.
  364.  
  365. * Menu:
  366.  
  367. * Urgent::  Things left to do until the next release of GPC
  368. * Bugs::    Other known bugs in GPC
  369.  
  370. 
  371. File: gpc.info,  Node: Urgent,  Next: Bugs,  Up: Known Bugs
  372.  
  373. Things left to do until the next release of GPC
  374. -----------------------------------------------
  375.  
  376.    Bugs:
  377.  
  378.    * infinite compiler recursion when a unit uses itself (sven18.pas)
  379.      <3A2275D8.F2DEA31A@zkm.de>
  380.  
  381.    * GPC crashes in the presence of old gpi files
  382.      <3A2275D8.F2DEA31A@zkm.de>
  383.  
  384.    * the operators `pow', `**', etc. cannot be redefined (maur7.pas)
  385.  
  386.    * enumeration types declared within a set or record type or variable
  387.      or constant declaration or the case selector of a record within a
  388.      unit are not visible in the main program (fjf211.pas,
  389.      fjf239[ab].pas)
  390.  
  391.    * enumeration types do not always properly survive transport through
  392.      two interfaces (russell2.pas, miguel2.pas, daj2.pas)
  393.  
  394.    * some functions in boolean shortcuts are always called
  395.      (fjf226[a-\infty].pas)
  396.  
  397.    * possible stack overflow when using string expressions in a loop
  398.      (fjf419.pas)
  399.  
  400.    * GPC sometimes crashes with `-g'
  401.      <Pine.SGI.4.10.9903231101500.6691-100000@pugh.bip.bham.ac.uk> (ok?)
  402.  
  403.    Wanted features:
  404.  
  405.    * make it possible to declare routines as I/O critical
  406.  
  407.    * `gp' make utility to replace automake; compile and link programs,
  408.      but compile units without linking and without a warning that there
  409.      is nothing to link; store GPC version numbers, platform and
  410.      options in GPD files and re-compile automatically in `--automake'
  411.      mode when they don't match; `--library-path' and `--include-path'
  412.      as synonyms for (multiple) `-L' and `-I' options
  413.  
  414. 
  415. File: gpc.info,  Node: Bugs,  Prev: Urgent,  Up: Known Bugs
  416.  
  417. Other known bugs in GPC
  418. -----------------------
  419.  
  420.    * methods returning records don't work (chief39.pas)
  421.  
  422.    * bugs with packed subranges (couper[1-3].pas)
  423.  
  424.    * `setlimit' is applied when it shouldn't be ((a) variable/constant
  425.      declarations, (b) `set of ShortCard', (c) constant sets), fatal
  426.      range overflows in set constructors (couper8.pas, couper10.pas)
  427.      <2C4F3FEF.20000809173117.FOO-13A6.frank@g-n-u.de>
  428.  
  429.    * string types declared in modules don't always work (daj3.pas)
  430.  
  431.    * declaring a procedure in the implementation with the same name as
  432.      an imported procedure doesn't work (chief18.pas), detect name
  433.      collisions between imported EP modules (mod9.pas)
  434.  
  435.    * don't allow assigning a pointer to a schema to a variable of type
  436.      pointer to discriminated schema with different discriminant
  437.      (fjf130.pas)
  438.  
  439.    * global dynamic variables (john1.pas) and global variables
  440.      initialized by a function (fjf210b.pas) don't work
  441.  
  442.    * check for using, incrementing, ... unused variables
  443.      <199711270257.VAA06393@mint.mint.net> (kevin2.pas), especially for
  444.      strings, also for `for'-loop counters after the loop (EP 6.8.1)
  445.      and modifying `for'-loop counters within the loop or in local
  446.      routines <200005240807.EAA05355@mail.bcpl.net>
  447.  
  448.    * dynamic sets don't work (->PPS)
  449.  
  450.    * there are some bugs with mathematical functions. GPC fails, for
  451.      example, the Paranoia test.
  452.  
  453.    * the compiler does not always recover well after a parse error
  454.      <199911040915.KAA11168@humulus.daimi.au.dk>
  455.  
  456.    * type problem with const/protected integer parameters (chief31.pas)
  457.  
  458.    * bug with const parameters and derived object types (tc19991003)
  459.  
  460.    * give a warning rather than an error (and nothing in
  461.      `--borland-pascal') when assigning/passing by value an object of
  462.      derived type to one of a base type (and change the VMT pointer in
  463.      the destination/actual parameter), don't change the VMT pointer
  464.      when assigning to a polymorphic object (chief35[ab].pas,
  465.      fjf451*.pas)
  466.  
  467.    * `prior parameter's size depends on `foo'' error with protected
  468.      string parameters (daj1.pas)
  469.  
  470.    * declarations of subranges of enumeration types cause `conflicting
  471.      types' messages (drf8.pas)
  472.  
  473.    * file parameters must not automatically be bindable in
  474.      `--extended-pascal' (fjf193c.pas)
  475.  
  476.    * automatically close dynamically allocated files on dispose and
  477.      files declared in a statement block at the end of the statement
  478.      block (fjf219[a-c].pas); handle variant records correctly
  479.      <6r9ir5$7v5$1@nntpd.lkg.dec.com> (fjf219d.pas); close files before
  480.      gotos out of their scope (fjf219[ef].pas)
  481.  
  482.    * const real parameters don't work (fjf228.pas)
  483.  
  484.    * arithmetic expressions don't work as lower array/subrange bounds
  485.      (fjf248.pas)
  486.  
  487.    * identifiers declared in a unit that have the same name as some
  488.      object method are not visible (fjf278.pas, russell2.pas)
  489.  
  490.    * pointers to objects returned by methods can't be dereferenced
  491.      (fjf299.pas)
  492.  
  493.    * integer parameters to built-in routines are not always converted
  494.      to the right type (fjf349.pas)
  495.  
  496.    * types declared in a module interface are not visible in the
  497.      implementation (kevin13.pas)
  498.  
  499.    * procedural variables are always passed by value
  500.      <ABcLeYr887@e00827.vno.lt> (marius1.pas)
  501.  
  502.    * `inline' and `asmname' don't work together if compiling without
  503.      optimization (maur3.pas)
  504.  
  505.    * module bug (mod12.pas)
  506.  
  507.    * Read, ReadStr and Val for all integer, real, char and string
  508.      types; [no-]read-range-checking (also for subtypes of char!),
  509.      [no-]read-base-specifier, [no-]read-white-space (not in Val!)
  510.      (read?.pas)
  511.  
  512.    * fixed string comparisons are wrong (takashi1.pas)
  513.  
  514.    * char fields of packed records don't work in read (tom5.pas)
  515.  
  516.    * count of parameters to methods in error messages should not
  517.      include Self
  518.      <8F990E3D9A6FD1118F3B0000F81EA1D84985CE@exchsa2.dsto.defence.gov.au>
  519.  
  520.    * bug on machines with strict alignment requirements
  521.      <199906021618.MAA06228@sten27.software.mitel.com>
  522.  
  523.    * too many parameters to `New' are not checked
  524.  
  525.    * `MedInt' (and therefore SizeType under DJGPP) is not accepted as
  526.      the 4th parameter to BlockRead, BlockWrite (fjf252.pas)
  527.  
  528.    * compilation of interface declarations takes quadratic time
  529.  
  530.    * installation: bug(s) in GPC's makefiles; Make-lang.in is missing a
  531.      rule so GPC can't be built without building GCC
  532.  
  533.    * forward referencing pointers generate debug info that appears as
  534.      generic pointers; no information of `with' statements is currently
  535.      given to the debugger; error in debug entries generated for
  536.      objects
  537.      <8F990E3D9A6FD1118F3B0000F81EA1D84985D7@exchsa2.dsto.defence.gov.au>
  538.  
  539.    * problems with initialising sets to the empty set
  540.      <onOioOAQz365EwbY@tcs02.demon.co.uk>
  541.  
  542.    * Solaris: the preprocessor doesn't understand `defined'
  543.      (fjf266.pas,fjf238.pas)
  544.      <19990129132623.21658.qmail@euler.stams.strath.ac.uk>
  545.  
  546.    * HP/UX: `unrecognizable insn' error in connection with conformant
  547.      or const string parameters)
  548.      <199809280741.JAA17719@rug105.cs.rug.nl> (sietse1.pas),
  549.      <Pine.SOL.4.10.9908051751550.23095-100000@niflheim.rutgers.edu>,
  550.      <396C3531.3A327722@cs.rug.nl>
  551.  
  552. 
  553. File: gpc.info,  Node: Planned Features,  Next: Done,  Prev: Known Bugs,  Up: To Do
  554.  
  555. Features planned for GPC
  556. ========================
  557.  
  558.    In the following sections, you can find informations about features
  559. which have been suggested and/or discussed for inclusion into GPC,
  560. usually in the GPC mailing list. The division into the sections and the
  561. names of the sections may change when this seems useful. The entries
  562. within each section are in no particular order.
  563.  
  564.    Some of the entries may be a bit difficult to read. Double question
  565. marks (`??') within the entries mean that it's not yet clear how to do
  566. the thing. Triple question marks (`???') mean that it's not clear
  567. whether to do it at all. ;-)
  568.  
  569. * Menu:
  570.  
  571. * Planned - Strings::            String types
  572. * Planned - Records/arrays::     Record and array types
  573. * Planned - Files::              Files
  574. * Planned - Other types::        Other types
  575. * Planned - Units and modules::  Units and modules
  576. * Planned - OOP::                Object oriented programming extensions
  577. * Planned - Misc::               Miscellaneous GPC topics
  578. * Planned - Utilities::          Useful utilities for GPC
  579.  
  580. 
  581. File: gpc.info,  Node: Planned - Strings,  Next: Planned - Records/arrays,  Up: Planned Features
  582.  
  583. Planned features: Strings
  584. -------------------------
  585.  
  586.    * const/var `AnyString' parameters and pointers (records internally,
  587.      cf. gpc.pas) (GetCapacity; only for var parameters)
  588.  
  589.    * `SetLength' for non-Pascal string types; use truncate-flag
  590.  
  591.    * make work on all string types: string functions from
  592.      rts/gstrings.pas, Concat/+ (function with conformant array;
  593.      Optimize `s := s + ch') (fh19971105)
  594.  
  595.    * new option `--arrays-of-char-as-cstrings={none,zero-based,all}' to
  596.      allow assigning [zero-based] arrays of char to cstring variables
  597.      (warning otherwise) (cstrini2.pas); make padding of those arrays
  598.      in initialized variables and in assignments dependent on this
  599.      switch (fh19970921) (fjf57.pas, ok) and if the length matches
  600.      exactly, give a warning (fh19971013) (cstrassign.pas); pass those
  601.      arrays as cstrings in read*, write*, str (P_*STRING; current
  602.      length=-1 in two places); compile time warning (and treatment as
  603.      non-zero-based) if it's not clear at compile time if a conformant
  604.      array or schema is zero-based or not, and an operation depends on
  605.      this in the zero-based state
  606.  
  607.    * Short strings (Length, Capacity) and switches
  608.      (tc19980326.2,tc19980327); allow `type x=string' (undiscriminated)
  609.      when switch is set so that strings don't default to length 255
  610.      (fh19971113) (fjf97.pas, ok); don't add a #0 terminator when
  611.      passing as a CString parameter (automatically use String2CString)
  612.  
  613.    * automatically convert CStrings to Strings?
  614.  
  615.    * optimize assignment of and (non-trimming) comparison with a
  616.      constant empty string
  617.  
  618.    * general switch `--bp-strings'
  619.  
  620.    * offer trimming string relations as functions
  621.  
  622.    * undiscriminated strings -> remove pointers to string constants
  623.  
  624.    * `WriteStr'-like function
  625.  
  626.    * unused local variables of string types are not detected
  627.  
  628.    * wide characters
  629.  
  630.    * open array/string parameters (`$P', `$V' in BP; undocumented
  631.      `OpenString' identifier in BP)
  632.  
  633. 
  634. File: gpc.info,  Node: Planned - Records/arrays,  Next: Planned - Files,  Prev: Planned - Strings,  Up: Planned Features
  635.  
  636. Planned features: Records/arrays
  637. --------------------------------
  638.  
  639.    * array/record initializers: recognize indices and field names
  640.      (sven4.pas), ISO structured constants (constdef.pas); variant
  641.      records <C1256791.0021F002.00@synln01.synstar.de>; allow omitting
  642.      fields; fields in arbitrary order ???; index/field name optional;
  643.      arrays: warning/error when too few fields are given; initialized
  644.      schemata
  645.  
  646.    * initialized types in records/arrays (inirec[24].pas)
  647.  
  648.    * when applying `New' to a variant record type with a selector
  649.      given, only allocate the space necessary for the selected variant
  650.      (varrec2.pas)
  651.  
  652.    * Oregon and Vax Pascal structured constants
  653.      <80256540.005E7D08.00@buffer1.quantel.com> ???
  654.  
  655.    * automatically detected upper array bounds in structured
  656.      constants/intialized variables (-> PXSC)
  657.  
  658.    * simplify code generated to compute size of dynamical variables if
  659.      no bitfields are involved
  660.  
  661.    * tagging feature for with statements (Sun Pascal) (tom6.pas)
  662.      <200012022215.eB2MFD614424@wsinpa16.win.tue.nl>
  663.  
  664.    * transpose arrays (Fortran)? <news:918557$mke$1@nnrp1.deja.com>
  665.  
  666. 
  667. File: gpc.info,  Node: Planned - Files,  Next: Planned - Other types,  Prev: Planned - Records/arrays,  Up: Planned Features
  668.  
  669. Planned features: Files
  670. -----------------------
  671.  
  672.    * AnyFile parameters and pointers
  673.  
  674.    * keep files in FDRList while they live, not only while they're
  675.      open, so _p_fdrdone() can be applied to all of them
  676.  
  677.    * packed files (EP) ??
  678.  
  679.    * write: left/center/both(?) justification???; rounding (PXSC) ???
  680.  
  681.    * BlockRead, BlockWrite: make last parameter internally a function
  682.      result and allow any integer type to be passed for it for
  683.      compatibility with 16 bit BP code
  684.  
  685.    * improve TFDDs (also for typed and untyped files)
  686.      (OpenProc/CloseProc)
  687.  
  688.    * read/write operators ???
  689.  
  690.    * let Assign call _p_initfdr() in `--borland-pascal'
  691.  
  692. 
  693. File: gpc.info,  Node: Planned - Other types,  Next: Planned - Units and modules,  Prev: Planned - Files,  Up: Planned Features
  694.  
  695. Planned features: Other types
  696. -----------------------------
  697.  
  698.    * read Booleans and enum types from files, write enum types to files
  699.  
  700.    * UCSD Pascal's `Integer[n]' ??? BCD?
  701.  
  702.    * enum types with specified values ???; Inc, Pred, ... ??
  703.  
  704.    * enum type extensions (syntax??)
  705.  
  706.    * check for dereferencing nil pointers
  707.  
  708.    * general subtypes ???
  709.  
  710.    * type cast operators ???
  711.  
  712.    * make `SizeOf' work on specially declared untyped var and const
  713.      parameters (`AnyType'?)
  714.  
  715.    * sparse sets; sets of arbitrary types ?? ???
  716.  
  717.    * optimize set constructors even better ???
  718.  
  719.    * superfluous warning with sets and variable elements (fh19970928)
  720.  
  721.    * variables of type undiscriminated schema; functions returning
  722.      undiscriminated schemata (pg19980813.3)
  723.  
  724.    * record and array values (EP)
  725.  
  726.    * initalization and finalization code for arbitrary types (e.g. GMP
  727.      types)
  728.  
  729.    * give an error rather than a warning when casting between types of
  730.      different size in {$X-}
  731.  
  732.    * storage class qualifiers (`external', `asmname', `static',
  733.      `volatile', `attribute')
  734.  
  735.    * `SELECTED_REAL_KIND' for real types (cf. Fortran, drf) ?? ???
  736.  
  737.    * resize schemata (cf. `SetLength' in Delphi)
  738.  
  739. 
  740. File: gpc.info,  Node: Planned - Units and modules,  Next: Planned - OOP,  Prev: Planned - Other types,  Up: Planned Features
  741.  
  742. Planned features: Units and modules
  743. -----------------------------------
  744.  
  745.    * qualified identifiers <34508F33.4F685BD1@keele.ac.uk> (also
  746.      `program_name.identifier'?) (problem module.id vs. record.field);
  747.      also for operators; `gpc' for built-in identifiers; duplicate
  748.      identifiers in different units (fjf260[ab].pas); giving the same
  749.      name to a routine in an interface and a local routine doesn't work
  750.      (fjf240.pas); don't capitalize variable names in error messages
  751.      and file name queries (store the casing of the first occurrence of
  752.      an identifier)
  753.  
  754.    * `external name', `asmname', ...; (-> BP, Delphi) ??, like `$L'
  755.      (fh19990325.2)
  756.  
  757.    * modules without implementation ??? (pmod1.pas)
  758.  
  759.    * `asmname' for units
  760.  
  761.    * `gpc-main' in GPI files
  762.  
  763.    * qualified import (mod10.pas)
  764.  
  765.    * units without initialization code or variables needing
  766.      initialization should not get a constructor
  767.  
  768.    * GPI format ??
  769.  
  770.    * inline functions in GPI files
  771.  
  772.    * unit inheritance (of a complete interface with one statement or
  773.      selectively)
  774.      <Pine.HPP.3.96.971105161603.28577A-100000@tea.geophysik.tu-freiberg.de>,
  775.      <199711061008.LAA25341@agnes.dida.physik.uni-essen.de> ??; virtual
  776.      procedures ???
  777.  
  778.    * allow accessing non-exported identifiers in the implementation of
  779.      a module ???
  780.      <Pine.BSI.3.96.971110210330.7570A-100000@malasada.lava.net>
  781.  
  782.    * `Initialization/Finalization' (Delphi: =`to begin/end do') (???)
  783.      (only in `--delphi'?)
  784.  
  785. 
  786. File: gpc.info,  Node: Planned - OOP,  Next: Planned - Misc,  Prev: Planned - Units and modules,  Up: Planned Features
  787.  
  788. Planned features: OOP
  789. ---------------------
  790.  
  791.    * init VMT (fjf445*.pas)
  792.  
  793.    * published, public, protected, private (scope limited to a unit in
  794.      `--borland-pascal', and to the object type normally)
  795.  
  796.    * `ProcVar := Obj.Method' {$X+}
  797.  
  798.    * VMT link (global, local, new: set to 0 or @VMT; destructor: reset
  799.      to 0)
  800.  
  801.    * checks: @object<>nil, typeof(object)<>0, size=-negsize; separate
  802.      switches; function initialized (that does these 3 tests) ???
  803.  
  804.    * virtual constructors
  805.  
  806.    * `OBJ is CLASS', type cast
  807.  
  808.    * `is_exactly' (instead of `TypeOf (OBJ) = TypeOf (CLASS)' ???
  809.  
  810.    * `CLASS is CLASS' (implemented in Pascal with `Parent')
  811.  
  812.    * `OBJ is INTERFACE' (not so easy?) ???
  813.  
  814.    * abstract methods, object types
  815.  
  816.    * allow method-implementation right after the declaration ???
  817.  
  818.    * friends ???
  819.  
  820.    * `dynamic' (= `virtual' ?)
  821.  
  822.    * `class' (reference to an object type); allow classes and object
  823.      types to inherit from each other; OOE;
  824.      <01BD7A3A.6B187A20.prucha@helicon.co.at>; obpascal.zip
  825.  
  826.    * `New': Delphi syntax; Dispose?? (automatically?; set references
  827.      automatically to nil) (-> FPC)
  828.  
  829.    * `--base-class=foo', `--base-object=bar' ???
  830.  
  831.    * properties <01BD7A3A.6B187A20.prucha@helicon.co.at>,
  832.      <16131.199805071354@potter.cc.keele.ac.uk>
  833.  
  834.    * interfaces (cf. OOE, Java)
  835.  
  836.    * object constants???
  837.  
  838.    * virtual constructors in interfaces (load)???
  839.  
  840.    * VMT problem with interfaces (my solution??? also with dynamic
  841.      linking???)
  842.  
  843.    * VMTs (also for local classes (EP modules???)!) in GPI files,
  844.      written to assembler file by main program; `--cfiles=foo': .s file
  845.      with VMTs for C/assembler??? (also .h???)
  846.  
  847.    * Variables of type pointer to more than one interface [and class]
  848.      (also possible!)
  849.  
  850.    * method overloading ??? ??
  851.  
  852.    * class libraries (more or less TV compatible?/Free Vision/EFLIB)
  853.      (streams as interface type?)
  854.  
  855.    * method pointers (`procedure/function of object') (-> Delphi) ???
  856.  
  857.    * declare VMT format in Pascal (only Size, NegSize, Parent,
  858.      Childs?); <obj>.pVMT ?
  859.  
  860.    * VMT: ClassID (64/128 bits?) default 0, error when duplicated,
  861.      warning when 0 and inherited from class with <>0 ?, not allowed
  862.      for abstract classes!; ClassName (also for abstract classes?); [];
  863.      ProgrammerID, BaseClassID at beginning of unit (redeclarable?) ???
  864.  
  865.    * in VMT: Parent: pVMT, Child: list of pVMT
  866.  
  867.    * for abstract classes: nearly empty VMTs (see VMT format)
  868.  
  869.    * find class by ClassID/ClassName (implementable in Pascal with
  870.      `Child')
  871.  
  872.    * object constants, class variables (-> other name for `VMT');
  873.      virtual/static
  874.  
  875.    * store in GPI: whether ClassID used, ClassName used, which classes
  876.      are instantiated
  877.  
  878.    * `asmname' for methods
  879.  
  880. 
  881. File: gpc.info,  Node: Planned - Misc,  Next: Planned - Utilities,  Prev: Planned - OOP,  Up: Planned Features
  882.  
  883. Planned features: Misc
  884. ----------------------
  885.  
  886.    * switch to warn about everything that could cause portability
  887.      problems
  888.  
  889.    * document all compiler options and switches; make `gpc --help'
  890.      output all the options ???
  891.  
  892.    * guarantee full evaluation in `{$B+}', `--borland-pascal mode'
  893.  
  894.    * libraries (static/shared; DLL)
  895.      <Pine.HPP.3.96.971110183550.7996B-100000@tea.geophysik.tu-freiberg.de>
  896.  
  897.    * smart linking
  898.  
  899.    * range
  900.      <Pine.LNX.4.21.0012091605570.8168-100000@rusty.russwhit.com>,
  901.      overflow (right operand of mod <=0 is an error), nil pointer,
  902.      string length, object VMT (pointer, negative size field), etc.
  903.      checking <199911040915.KAA11168@humulus.daimi.au.dk>; also for
  904.      array slice access (miklos1.pas); check that strings converted to
  905.      CStrings don't contain #0 characters; initialize strings (length
  906.      field), pointers, ordinal values and reals(?) with invalid values
  907.      if checking is on
  908.  
  909.    * overloading of unary operators
  910.  
  911.    * warn about assigning the address of a local procedure (variable?)
  912.      to a global pointer variable (fjf139.pas) or returning it from a
  913.      function
  914.  
  915.    * intel assembler syntax; BP BASM ???
  916.  
  917.    * function overloading (in units and static methods?? - with
  918.      different parameters, override or overload?); asmname?? (perhaps:
  919.      first occurrence of a procedure with normal asmname (=> all
  920.      non-overloaded procedures get normal asmnames)?); cf. Delphi
  921.      methods without `override'
  922.  
  923.    * and_else, or_then (names??); guarantee complete evaluation in
  924.      `{$B+}' mode
  925.  
  926.    * `?:' (`x := if c then bar else baz')
  927.  
  928.    * C operators (`,', `=', `++'/`--' (pre/post), `+=', ...), as
  929.      functions ?
  930.  
  931.    * `for var : type = foo to bar do' ???
  932.  
  933.    * error/exception handling (Java,Delphi?)
  934.      <01BD7A3A.6B187A20.prucha@helicon.co.at> (tc20000623)
  935.  
  936.    * RTS checking (libgpc_g), switch?
  937.  
  938.    * simplify math functions
  939.      <199708091006.MAA26576@agnes.dida.physik.uni-essen.de>
  940.  
  941.    * variable number of arguments <32F9CFE7.5CB@lmemw.ericsson.se> ??
  942.      ???
  943.  
  944.    * multithreading support ?? ???
  945.  
  946.    * `--wirth-pascal' :-)
  947.  
  948.    * PXSC standard... (pxsc.zip, /home/peter/pxsc) (??)
  949.  
  950.    * Object Oriented Extensions (Technical Report) (??)
  951.  
  952.    * generic types (cf. OOE section C.1) (gentypes.pas) ???
  953.  
  954.    * default parameters (cf. OOE section C.4; Delphi 4?)
  955.      (iniparm[12].pas)
  956.  
  957.    * Pascal++ standard... (??) ???
  958.  
  959.    * allow `procedure foo; inline;'
  960.  
  961.    * compile time assertions ???
  962.  
  963.    * Ignore{Value,Result}/Discard and Swap for arbitrary types
  964.  
  965.    * make operators also available as functions
  966.  
  967.    * `absolute' with automatic type detection; `absolute' procedures
  968.      (with automatic parameter detection) ???
  969.  
  970.    * Delphi features: Initialize, Finalize, Slice, TypeInfo ???,
  971.      dynamic arrays (tc19991012)
  972.  
  973.    * output column numbers in error messages ??
  974.  
  975.    * warn when `and' and `or' are combined without parentheses
  976.      (-Wparentheses; on by default)
  977.  
  978.    * assembler blocks should be considered volatile by default ???
  979.      (fh19980829.4)
  980.  
  981.    * BP compatible `Graph' unit
  982.  
  983. 
  984. File: gpc.info,  Node: Planned - Utilities,  Prev: Planned - Misc,  Up: Planned Features
  985.  
  986. Planned features: Utilities
  987. ---------------------------
  988.  
  989.    * C header to Pascal translator
  990.  
  991.    * gdb: Pascal types (sets, files, subranges, schemata, strings, ...)
  992.  
  993.    * `indent'-like source code formatter for Pascal
  994.  
  995.    * AT&T <-> Intel assembler syntax converter ???
  996.  
  997. 
  998. File: gpc.info,  Node: Done,  Prev: Planned Features,  Up: To Do
  999.  
  1000. Fixed bugs and implemented features
  1001. ===================================
  1002.  
  1003. * Menu:
  1004.  
  1005. * Fixed Bugs::            Problems that have been solved
  1006. * Implemented Features::  Features that have been implemented
  1007.  
  1008.